package com.widget.time;

import android.content.Context;
import android.view.View;


import com.creative.accountsdk.R;

import java.util.Arrays;
import java.util.Calendar;
import java.util.List;




public class WheelMain {

	private View view;
	private WheelView wv_year;
	private WheelView wv_month;
	private WheelView wv_day;
	private WheelView wv_hours;
	private WheelView wv_mins;
	public int screenheight;
	private boolean hasSelectTime;
	private static int START_YEAR = 1930, END_YEAR = 2100;

	public View getView() {
		return view;
	}

	public void setView(View view) {
		this.view = view;
	}

	public static int getSTART_YEAR() {
		return START_YEAR;
	}

	public static void setSTART_YEAR(int sTART_YEAR) {
		START_YEAR = sTART_YEAR;
	}

	public static int getEND_YEAR() {
		return END_YEAR;
	}

	public static void setEND_YEAR(int eND_YEAR) {
		END_YEAR = eND_YEAR;
	}

	public WheelMain(View view) {
		super();
		this.view = view;
		hasSelectTime = false;
		setView(view);
	}
	public WheelMain(View view,boolean hasSelectTime) {
		super();
		this.view = view;
		this.hasSelectTime = hasSelectTime;
		setView(view);
	}
	public void initDateTimePicker(int year ,int month,int day,boolean ifEnglish){
		this.initDateTimePicker(year, month, day, 0, 0, ifEnglish);
	}
	/**
	 * @Description: TODO 弹出日期时间选择器
	 */
	public void initDateTimePicker(final int year , final int month ,int day,int h,int m,boolean ifEnglish) {

		Calendar calendar = Calendar.getInstance();
		final int year1 = calendar.get(Calendar.YEAR);
		final int month1 = calendar.get(Calendar.MONTH)+1;
		 final int day1 = calendar.get(Calendar.DAY_OF_MONTH);

		// 添加大小月月份并将其转换为list,方便之后的判断
		String[] months_big = { "1", "3", "5", "7", "8", "10", "12" };
		String[] months_little = { "4", "6", "9", "11" };

		final List<String> list_big = Arrays.asList(months_big);
		final List<String> list_little = Arrays.asList(months_little);

		// 年
		wv_year = (WheelView) view.findViewById(R.id.year);
		wv_year.setAdapter(new NumericWheelAdapter(START_YEAR, year1));// 设置"年"的显示数据
		wv_year.setCyclic(true);// 可循环滚动
		wv_year.setLabel(ifEnglish ? "Year" : "年");// 添加文字
		wv_year.setCurrentItem(year - START_YEAR);// 初始化时显示的数据
		wv_year.setFirstValue(year);
		// 月
		wv_month = (WheelView) view.findViewById(R.id.month);
		wv_month.setAdapter(new NumericWheelAdapter(1, 12));
		wv_month.setCyclic(true);
		wv_month.setLabel(ifEnglish?"Month":"月");
		wv_month.setCurrentItem(month);

		// 日
		wv_day = (WheelView) view.findViewById(R.id.day);
		wv_day.setCyclic(true);

		// 判断大小月及是否闰年,用来确定"日"的数据
		if (list_big.contains(String.valueOf(month + 1))) {

			wv_day.setAdapter(new NumericWheelAdapter(1, day1));
		} else if (list_little.contains(String.valueOf(month + 1))) {

			wv_day.setAdapter(new NumericWheelAdapter(1, day1));
		} else {
			// 闰年
			if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
				wv_day.setAdapter(new NumericWheelAdapter(1, day1));
			else
				wv_day.setAdapter(new NumericWheelAdapter(1, day1));
		}
		wv_day.setLabel(ifEnglish ? "Day" : "日");
		wv_day.setCurrentItem(day - 1);

		wv_hours = (WheelView)view.findViewById(R.id.hour);
		wv_mins = (WheelView)view.findViewById(R.id.min);
		if(hasSelectTime){
			wv_hours.setVisibility(View.VISIBLE);
			wv_mins.setVisibility(View.VISIBLE);

			wv_hours.setAdapter(new NumericWheelAdapter(0, 23));
			wv_hours.setCyclic(true);// 可循环滚动
			wv_hours.setLabel("时");// 添加文字
			wv_hours.setCurrentItem(h);


			wv_mins.setAdapter(new NumericWheelAdapter(0, 59));
			wv_mins.setCyclic(true);// 可循环滚动
			wv_mins.setLabel("分");// 添加文字
			wv_mins.setCurrentItem(m);
		}else{
			wv_hours.setVisibility(View.GONE);
			wv_mins.setVisibility(View.GONE);
		}

		// 添加"年"监听
		OnWheelChangedListener wheelListener_year = new OnWheelChangedListener() {
			public void onChanged(WheelView wheel, int oldValue, int newValue) {
				int year_num = newValue + START_YEAR;
				wv_year.setFirstValue(year_num);
				int  cur_month = wv_month.getCurrentItem() + 1;
			/*	Log.e("WheelMain","年份WheelMain  year_num:"+year_num+" oldValue:"+oldValue+" " +
						"newValue:"+oldValue+" current:"+year+" ye"+year1);*/
				// 判断大小月及是否闰年,用来确定"日"的数据
		/*		if (list_big.contains(String.valueOf(wv_month.getCurrentItem() + 1))) {
					wv_day.setAdapter(new NumericWheelAdapter(1, 31));
				} else if (list_little.contains(String.valueOf(wv_month.getCurrentItem() + 1))) {
					wv_day.setAdapter(new NumericWheelAdapter(1, 30));
				} else {
					if ((year_num % 4 == 0 && year_num % 100 != 0)
							|| year_num % 400 == 0)
						wv_day.setAdapter(new NumericWheelAdapter(1, 29));
					else
						wv_day.setAdapter(new NumericWheelAdapter(1, 28));
				}*/
				if (list_big.contains(String.valueOf(wv_month.getCurrentItem() + 1)) ) {
					if(year_num==year1){
						wv_month.setAdapter(new NumericWheelAdapter(1, month1));
						wv_month.setCurrentItem(month1);

					}else{
						wv_month.setAdapter(new NumericWheelAdapter(1, 12));
					}
					wv_day.setAdapter(new NumericWheelAdapter(1, 31));
				} else if (list_little.contains(String.valueOf(wv_month.getCurrentItem() + 1))) {
					if(year_num==year1){
						wv_month.setAdapter(new NumericWheelAdapter(1, month1));
						wv_month.setCurrentItem(month1);

					}else{
						wv_month.setAdapter(new NumericWheelAdapter(1, 12));
					}
					wv_day.setAdapter(new NumericWheelAdapter(1, 30));
				} else {
					if ((year_num % 4 == 0 && year_num % 100 != 0) || year_num % 400 == 0){
						if(year_num==year1){
							wv_month.setAdapter(new NumericWheelAdapter(1, month1));
							wv_month.setCurrentItem(month1);
						}else{
							wv_month.setAdapter(new NumericWheelAdapter(1, 12));
						}
						wv_day.setAdapter(new NumericWheelAdapter(1, 29));
					}else{
						if(year_num==year1){
							wv_month.setAdapter(new NumericWheelAdapter(1, month1));
							wv_month.setCurrentItem(month1);
						}else{
							wv_month.setAdapter(new NumericWheelAdapter(1, 12));
						}
						wv_day.setAdapter(new NumericWheelAdapter(1, 28));
					}
				}
			}
		};

		// 添加"月"监听
		OnWheelChangedListener wheelListener_month = new OnWheelChangedListener() {
			public void onChanged(WheelView wheel, int oldValue, int newValue) {



				  int month_num = newValue + 1;
					// 判断大小月及是否闰年,用来确定"日"的数据
						if(wv_year.getFirstValue() ==year1){
							wv_month.setAdapter(new NumericWheelAdapter(1, month1));
						}

						if (list_big.contains(String.valueOf(month_num))) {
							if(month_num==month1 && wv_year.getFirstValue() ==year1){
								wv_day.setAdapter(new NumericWheelAdapter(1, day1));
								wv_day.setCurrentItem(day1);
							}else{
                                if(month_num==2){
									wv_day.setAdapter(new NumericWheelAdapter(1, 28));
									wv_day.setCurrentItem(28);
								}else{
									wv_day.setAdapter(new NumericWheelAdapter(1, 31));
									wv_day.setCurrentItem(31);
								}
							}
						} else if (list_little.contains(String.valueOf(month_num))) {
							if(month_num==month1 && wv_year.getFirstValue() ==year1) {
								wv_day.setAdapter(new NumericWheelAdapter(1, day1));
								wv_day.setCurrentItem(day1);
							}else{
								if(month_num==2){
									wv_day.setAdapter(new NumericWheelAdapter(1, 28));
									wv_day.setCurrentItem(28);
								}else{
									wv_day.setAdapter(new NumericWheelAdapter(1, 30));
									wv_day.setCurrentItem(30);
								}
							}
						} else {
							setDay( month_num, month1, day1, year1);
						}
					}
		};

		wv_year.addChangingListener(wheelListener_year);
		wv_month.addChangingListener(wheelListener_month);

		// 根据屏幕密度来指定选择器字体的大小(不同屏幕可能不同)
		int textSize = 0;
		if(hasSelectTime)
			textSize = (screenheight / 100) * 2;
		else
			textSize = (screenheight / 100) * 3;
		wv_day.TEXT_SIZE = textSize;
		wv_month.TEXT_SIZE = textSize;
		wv_year.TEXT_SIZE = textSize;
		wv_hours.TEXT_SIZE = textSize;
		wv_mins.TEXT_SIZE = textSize;

	}

	private void  setDay(int month_num,int month1,int day1,int year1){
		if (((wv_year.getCurrentItem() + START_YEAR) % 4 == 0 && (wv_year
				.getCurrentItem() + START_YEAR) % 100 != 0)
				|| (wv_year.getCurrentItem() + START_YEAR) % 400 == 0){
			if(month_num==month1 &&  wv_year.getFirstValue() ==year1){
				wv_day.setAdapter(new NumericWheelAdapter(1, day1));
				wv_day.setCurrentItem(day1);
			}else{
				wv_day.setAdapter(new NumericWheelAdapter(1, 29));
				wv_day.setCurrentItem(29);
			}
		}else{
			if(month_num==month1 && wv_year.getFirstValue() ==year1){
				wv_day.setAdapter(new NumericWheelAdapter(1, day1));
				wv_day.setCurrentItem(day1);
			}else{
				wv_day.setAdapter(new NumericWheelAdapter(1, 28));
				wv_day.setCurrentItem(28);
			}
		}
	}

	public String getTime(Context context,boolean  ifEnglish) {
		StringBuffer sb = new StringBuffer();
		if(!hasSelectTime)
			sb.append((wv_year.getCurrentItem() + START_YEAR)).append(ifEnglish?"-":context.getString(R.string.select_time_year))
					.append((wv_month.getCurrentItem() + 1)).append(ifEnglish?"-":context.getString(R.string.select_time_month))
					.append((wv_day.getCurrentItem() + 1)).append(ifEnglish?"":context.getString(R.string.select_time_day));
		else
			sb.append((wv_year.getCurrentItem() + START_YEAR)).append("-")
					.append((wv_month.getCurrentItem() + 1)).append("-")
					.append((wv_day.getCurrentItem() + 1)).append(" ")
					.append(wv_hours.getCurrentItem()).append(":")
					.append(wv_mins.getCurrentItem());
		return sb.toString();
	}

	public   String   getTimeCont(){
		StringBuffer sb = new StringBuffer();
		if(!hasSelectTime){
			sb.append((wv_year.getCurrentItem() + START_YEAR)).append("-")
					.append((wv_month.getCurrentItem() + 1)).append("-")
					.append((wv_day.getCurrentItem() + 1));
		}else{
			sb.append((wv_year.getCurrentItem() + START_YEAR)).append("-")
			.append((wv_month.getCurrentItem() + 1)).append("-")
			.append((wv_day.getCurrentItem() + 1)).append(" ")
			.append(wv_hours.getCurrentItem()).append(":")
			.append(wv_mins.getCurrentItem());
		}
		return sb.toString();
	}
}
